# @configure_input@
# Makefile for libcpp.  Run 'configure' to generate Makefile from Makefile.in

# Copyright (C) 2004-2025 Free Software Foundation, Inc.

#This file is part of libcpp.

#libcpp is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 3, or (at your option)
#any later version.

#libcpp is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with libcpp; see the file COPYING3.  If not see
#<http://www.gnu.org/licenses/>.

@SET_MAKE@

srcdir = @srcdir@
top_builddir = .
VPATH = @srcdir@
INSTALL = @INSTALL@
AR = @AR@
ARFLAGS = cru
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
CATALOGS = $(patsubst %,po/%,@CATALOGS@)
CC = @CC@
CFLAGS = @CFLAGS@
WARN_CFLAGS = @warn@ @c_warn@ @WARN_PEDANTIC@ @WERROR@
CXX = @CXX@
CXXFLAGS = @CXXFLAGS@
WARN_CXXFLAGS = @warn@ @WARN_PEDANTIC@ @WERROR@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
EXEEXT = @EXEEXT@
GMSGFMT = @GMSGFMT@
INCINTL = @INCINTL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
SHELL = @SHELL@
USED_CATALOGS = @USED_CATALOGS@
XGETTEXT = @XGETTEXT@
CCDEPMODE = @CCDEPMODE@
CXXDEPMODE = @CXXDEPMODE@
DEPDIR = @DEPDIR@
NOEXCEPTION_FLAGS = @noexception_flags@
PICFLAG = @PICFLAG@
CET_HOST_FLAGS = @CET_HOST_FLAGS@

datarootdir = @datarootdir@
datadir = @datadir@
exec_prefix = @prefix@
libdir = @libdir@
localedir = $(datadir)/locale
prefix = @prefix@

MSGMERGE = msgmerge
mkinstalldirs = $(SHELL) $(srcdir)/../mkinstalldirs
depcomp = $(SHELL) $(srcdir)/../depcomp

INCLUDES = -I$(srcdir) -I. -I$(srcdir)/../include @INCINTL@ \
	-I$(srcdir)/include

ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS) $(PICFLAG) \
	$(CET_HOST_FLAGS)
ALL_CXXFLAGS = $(CXXFLAGS) $(WARN_CXXFLAGS) $(NOEXCEPTION_FLAGS) $(INCLUDES) \
	$(CPPFLAGS) $(PICFLAG) $(CET_HOST_FLAGS)

# The name of the compiler to use.
COMPILER = $(CXX)
COMPILER_FLAGS = $(ALL_CXXFLAGS)
DEPMODE = $(CXXDEPMODE)


libcpp_a_OBJS = charset.o directives.o errors.o \
	expr.o files.o identifiers.o init.o lex.o line-map.o macro.o \
	mkdeps.o pch.o symtab.o traditional.o

libcpp_a_SOURCES = charset.cc directives.cc errors.cc \
	expr.cc files.cc identifiers.cc init.cc lex.cc line-map.cc macro.cc \
	mkdeps.cc pch.cc symtab.cc traditional.cc

all: libcpp.a $(USED_CATALOGS)

.SUFFIXES:
.SUFFIXES: .cc .gmo .o .obj .po .pox

libcpp.a: $(libcpp_a_OBJS)
	-rm -f libcpp.a
	$(AR) $(ARFLAGS) libcpp.a $(libcpp_a_OBJS)
	$(RANLIB) libcpp.a

# Rules to rebuild the configuration

Makefile: $(srcdir)/Makefile.in config.status
	$(SHELL) ./config.status Makefile

config.status: $(srcdir)/configure
	$(SHELL) ./config.status --recheck

$(srcdir)/configure: @MAINT@ $(srcdir)/aclocal.m4
	cd $(srcdir) && $(AUTOCONF)

$(srcdir)/aclocal.m4: @MAINT@ $(srcdir)/../config/acx.m4 \
	$(srcdir)/../config/gettext-sister.m4 $(srcdir)/../config/iconv.m4 \
	$(srcdir)/../config/codeset.m4 $(srcdir)/../config/lib-ld.m4 \
	$(srcdir)/../config/lib-link.m4 $(srcdir)/../config/lib-prefix.m4 \
	$(srcdir)/../config/override.m4 $(srcdir)/../config/proginstall.m4 \
	$(srcdir)/configure.ac
	cd $(srcdir) && $(ACLOCAL) -I ../config

config.h: stamp-h1
	test -f config.h || (rm -f stamp-h1 && $(MAKE) stamp-h1)

stamp-h1: $(srcdir)/config.in config.status
	-rm -f stamp-h1
	$(SHELL) ./config.status config.h

$(srcdir)/config.in: @MAINT@ $(srcdir)/configure.ac
	cd $(srcdir) && $(AUTOHEADER)
	-rm -f stamp-h1

# It is not possible to get LOCALEDIR defined in config.h because
# the value it needs to be defined to is only determined in the
# Makefile.  Hence we do this instead.
localedir.h: localedir.hs; @true
localedir.hs: Makefile
	echo "#define LOCALEDIR \"$(localedir)\"" > localedir.new
	$(srcdir)/../move-if-change localedir.new localedir.h
	echo timestamp > localedir.hs

# Installation rules and other phony targets

# These rule has to look for .gmo modules in both srcdir and
# the cwd, and has to check that we actually have a catalog
# for each language, in case they weren't built or included
# with the distribution.
installdirs:
	@$(mkinstalldirs) $(DESTDIR)$(datadir); \
	cats="$(CATALOGS)"; for cat in $$cats; do \
	  lang=`basename $$cat | sed 's/\.gmo$$//'`; \
	  if [ -f $$cat ] || [ -f $(srcdir)/$$cat ]; then \
	    dir=$(localedir)/$$lang/LC_MESSAGES; \
	    $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \
	  fi; \
	done

install-strip install: all installdirs
	cats="$(CATALOGS)"; for cat in $$cats; do \
	  lang=`basename $$cat | sed 's/\.gmo$$//'`; \
	  if [ -f $$cat ]; then :; \
	  elif [ -f $(srcdir)/$$cat ]; then cat=$(srcdir)/$$cat; \
	  else continue; \
	  fi; \
	  dir=$(localedir)/$$lang/LC_MESSAGES; \
	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
	done

mostlyclean:
	-rm -f *.o

clean: mostlyclean
	-rm -rf libcpp.a $(srcdir)/autom4te.cache

distclean: clean
	-rm -f config.h stamp-h1 config.status config.cache config.log \
	  configure.lineno configure.status.lineno Makefile localedir.h \
	  localedir.hs $(DEPDIR)/*.Po
	-rmdir $(DEPDIR)

maintainer-clean: distclean
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
	-rm -f $(srcdir)/configure $(srcdir)/aclocal.m4

check:
installcheck:
dvi:
pdf:
html:
info:
install-info:
install-pdf:
install-dvi:
install-man:
install-html:

update-po: $(CATALOGS:.gmo=.pox)

.PHONY: installdirs install install-strip mostlyclean clean distclean \
  maintainer-clean check installcheck dvi pdf html info install-info \
  install-man update-po install-html install-pdf install-dvi

# Dependency rule.
COMPILE.base = $(COMPILER) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(COMPILER_FLAGS) -c
ifeq ($(DEPMODE),depmode=gcc3)
# Note that we put the dependencies into a .Tpo file, then move them
# into place if the compile succeeds.  We need this because gcc does
# not atomically write the dependency output file.
COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
else
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
	  $(depcomp) $(COMPILE.base)
# depcomp handles atomicity for us, so we don't need a postcompile
# step.
POSTCOMPILE =
endif

# Implicit rules and I18N

.cc.o:
	$(COMPILE) $<
	$(POSTCOMPILE)

# N.B. We do not attempt to copy these into $(srcdir).
.po.gmo:
	$(mkinstalldirs) po
	$(GMSGFMT) --statistics -o $@ $<

# The new .po has to be gone over by hand, so we deposit it into
# build/po with a different extension.
# If build/po/$(PACKAGE).pot exists, use it (it was just created),
# else use the one in srcdir.
.po.pox:
	$(mkinstalldirs) po
	$(MSGMERGE) $< `if test -f po/$(PACKAGE).pot; \
	                then echo po/$(PACKAGE).pot; \
	                else echo $(srcdir)/po/$(PACKAGE).pot; fi` -o $@

# Rule for regenerating the message template.
$(PACKAGE).pot: po/$(PACKAGE).pot
po/$(PACKAGE).pot: $(libcpp_a_SOURCES)
	$(mkinstalldirs) $(srcdir)/po
	$(XGETTEXT) --default-domain=$(PACKAGE) \
	  --keyword=_ --keyword=N_ \
	  --keyword=cpp_error:3 \
	  --keyword=cpp_warning:3 \
	  --keyword=cpp_pedwarning:3 \
	  --keyword=cpp_warning_syshdr:3 \
	  --keyword=cpp_warning_at:4 \
	  --keyword=cpp_pedwarning_at:4 \
	  --keyword=cpp_error_with_line:5 \
	  --keyword=cpp_warning_with_line:5 \
	  --keyword=cpp_pedwarning_with_line:5 \
	  --keyword=cpp_warning_with_line_syshdr:5 \
	  --keyword=cpp_error_at:4 \
	  --keyword=cpp_errno:3 \
	  --keyword=SYNTAX_ERROR --keyword=SYNTAX_ERROR2 \
	  --copyright-holder="Free Software Foundation, Inc." \
	  --msgid-bugs-address="https://gcc.gnu.org/bugs/" \
	  --language=GCC-source -o po/$(PACKAGE).pot.tmp $^
	sed 's:$(srcdir)/::g' <po/$(PACKAGE).pot.tmp >po/$(PACKAGE).pot
	rm po/$(PACKAGE).pot.tmp

ETAGS = @ETAGS@

TAGS_SOURCES = $(libcpp_a_SOURCES) internal.h system.h ucnid.h \
    include/cpplib.h include/line-map.h include/mkdeps.h include/symtab.h \
    include/rich-location.h include/label-text.h


TAGS: $(TAGS_SOURCES)
	cd $(srcdir) && $(ETAGS) $(TAGS_SOURCES)

# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

# Dependencies
-include $(patsubst %.o, $(DEPDIR)/%.Po, $(libcpp_a_OBJS))

# Dependencies on generated headers have to be explicit.
init.o: localedir.h
